package com.xue.collection;

import java.util.*;


public class SetTest {
    public static void main(String[] args) {
             testSet01();
             testSet02();
             testSet03();
        }

        /**
         * Set集合的使用：LinkedHashSet
         */
        private static void testSet03() {
            // 创建一个Set实现类的实例对象
            // 多态（父类指代子类）
            // 面向接口的编程
            Set set0 = new TreeSet(); // 原始初始化长度为16
            // 向Set集合中添加元素
            set0.add("zhangsan");
            set0.add("lisi");
            set0.add("lisi");
            // set0.add(null);
            set0.add("wangwu");
            System.out.println("使用迭代器进行遍历：");
            // 遍历Set集合中的元素，并进行输出
            // 使用迭代器进行迭代遍历
            // 获取HashSet的迭代器对象
            Iterator it = set0.iterator();
            // 使用hasNext方法判断有没有可以迭代遍历的元素，
            // 如果为true，则说明还有元素，可以继续迭代遍历
            while (it.hasNext()) {
                // 使用迭代器的Next方法获取当前遍历的元素对象
                // 因为迭代器是从第一个元素之前的位置开始进行迭代判定
                Object obj = it.next();
                // 输出取出的元素内容
                System.out.println("  " + (obj == null ? "null" : obj.toString()));
            }

            System.out.println("使用增强型的for循环进行遍历：");
            // 执行流程：使用临时遍历obj从集合对象set0中依次取出元素对象，不用担心越界问题
            int count = 0; // 手动计数器
            for (Object obj : set0) {
                // 取出当前遍历的元素对象
                String strObj = obj == null ? "null" : obj.toString();
                System.out.println("  " + strObj);
                // 自定义计数器
                count++;
            }
        }

        /**
         * Set集合的使用：LinkedHashSet
         */
        private static void testSet02() {
            // 创建一个Set实现类的实例对象
            // 多态（父类指代子类）
            // 面向接口的编程
            Set set0 = new LinkedHashSet(); // 原始初始化长度为16
            // 向Set集合中添加元素
            set0.add("zhangsan");
            set0.add("lisi");
            set0.add("lisi");
            set0.add(null);
            set0.add("wangwu");
            System.out.println("使用迭代器进行遍历：");
            // 遍历Set集合中的元素，并进行输出
            // 使用迭代器进行迭代遍历
            // 获取HashSet的迭代器对象
            Iterator it = set0.iterator();
            // 使用hasNext方法判断有没有可以迭代遍历的元素，
            // 如果为true，则说明还有元素，可以继续迭代遍历
            while (it.hasNext()) {
                // 使用迭代器的Next方法获取当前遍历的元素对象
                // 因为迭代器是从第一个元素之前的位置开始进行迭代判定
                Object obj = it.next();
                // 输出取出的元素内容
                System.out.println("  " + (obj == null ? "null" : obj.toString()));
            }

            System.out.println("使用增强型的for循环进行遍历：");
            // 执行流程：使用临时遍历obj从集合对象set0中依次取出元素对象，不用担心越界问题
            int count = 0; // 手动计数器
            for (Object obj : set0) {
                // 取出当前遍历的元素对象
                String strObj = obj == null ? "null" : obj.toString();
                System.out.println("  " + strObj);
                // 自定义计数器
                count++;
            }
        }

        /**
         * Set集合的使用：HashSet
         */
        private static void testSet01() {
            // 创建一个Set实现类的实例对象
            // 多态（父类指代子类）
            // 面向接口的编程
            Set set0 = new HashSet(); // 原始初始化长度为16
            // 向Set集合中添加元素
            set0.add("zhangsan");
            set0.add("lisi");
            set0.add("lisi");
            set0.add(null);
            set0.add("wangwu");
            System.out.println("使用迭代器进行遍历：");
            // 遍历Set集合中的元素，并进行输出
            // 使用迭代器进行迭代遍历
            // 获取HashSet的迭代器对象
            Iterator it = set0.iterator();
            // 使用hasNext方法判断有没有可以迭代遍历的元素，
            // 如果为true，则说明还有元素，可以继续迭代遍历
            while (it.hasNext()) {
                // 使用迭代器的Next方法获取当前遍历的元素对象
                // 因为迭代器是从第一个元素之前的位置开始进行迭代判定
                Object obj = it.next();
                // 输出取出的元素内容
                System.out.println("  " + (obj == null ? "null" : obj.toString()));
            }

            System.out.println("使用增强型的for循环进行遍历：");
            // 执行流程：使用临时遍历obj从集合对象set0中依次取出元素对象，不用担心越界问题
            int count = 0; // 手动计数器
            for (Object obj : set0) {
                // 取出当前遍历的元素对象
                String strObj = obj == null ? "null" : obj.toString();
                System.out.println("  " + strObj);
                // 自定义计数器
                count++;
            }
        }
    }